package com.baofu.paycore.biz.paycore.handler;


import com.baofu.paycore.biz.model.BackPayBO;
import com.baofu.paycore.biz.model.CancelBO;
import com.baofu.paycore.biz.model.ReverseBO;
import com.baofu.paycore.biz.model.WebPayBO;
import com.baofu.paycore.manager.model.PayBaseBO;
import com.baofu.paycore.manager.model.ResponseBO;
import lombok.extern.slf4j.Slf4j;

/**
 * Description  :统一支付handler 父类
 *
 * Author       :LZQ
 * Date         :2014.12.02
 */
@Slf4j
public class PayBizHandlerAdapter<T extends PayBaseBO,V> implements PayBizHandler<T,V> {

    /**
     * 异步处理
     *
     * @param payBO 订单对象
     * @return 银行跳转url
     */
    public WebPayBO asyncProcess(T payBO) {
        return null;
    }

    /**
     * 同步交易处理
     *
     * @param payBO 订单对象
     * @return 后台处理响应
     */
    public BackPayBO process(T payBO) {
        return null;
    }

    /**
     * 消费撤销
     *
     * @param payBO 订单对象
     * @return 撤销处理响应
     */
    public CancelBO cancel(T payBO) {
        return null;
    }

    /**
     * 回调
     *
     * @return 回调处理响应
     */
    public T callBack(V callBack) {
        return null;
    }

    /**
     * 冲正服务
     *
     * @param payBO 订单对象
     */
    public ReverseBO reverse(T payBO) {
        return null;
    }

    /**
     * 撤销冲正服务
     *
     * @param payBO 订单对象
     */
    public CancelBO cancelReverse(T payBO) {
        return null;
    }

    /**
     * 需重试接口 对内部资金单的重试（订单状态推进）
     *
     * @param payBO 支付订单对象
     * @return ResponseBO
     * @throws RuntimeException 出现异常时表示重试没有成功（子类方法实现中不可捕获异常）
     */
    public ResponseBO dalInnerFundProc(T payBO) throws RuntimeException {
        return null;
    }

    /**
     * 二次支付时 回滚第一笔支付单
     *
     * @param payBO    支付订单对象
     * @return ResponseBO
     * @throws RuntimeException 出现异常时表示重试没有成功（子类方法实现中不可捕获异常）
     */
    public ResponseBO rollbackOrder(T payBO, T oldPayBO) throws RuntimeException {
        return null;
    }
}
